home *** CD-ROM | disk | FTP | other *** search
Lisp/Scheme | 1988-04-07 | 1.4 KB | 41 lines | [TEXT/ttxt] |
- ;; Larry Mulcahy 1988
- ;; multiple values
-
- (provide 'values)
- (require 'iteration "iter.lsp")
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; values
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defun values (&rest v) v)
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; multiple-value-setq
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defmacro multiple-value-setq (variables form)
- (let* ((values-label (gensym))
- (values-making-expression `(,values-label ,form))
- (list-of-setqs
- (mapcar #'(lambda (n) `(setq ,(nth n variables)
- (nth ,n ,values-label)))
- (iota (length variables)))))
- `(let (,values-making-expression)
- ,@list-of-setqs)))
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; multiple-value-bind
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (defmacro multiple-value-bind (variables value-form &rest forms)
- (let* ((values-label (gensym))
- (values-making-expression `(,values-label ,value-form))
- (list-of-variable-value-pairs
- (mapcar #'(lambda (n) `(,(nth n variables)
- (nth ,n ,values-label)))
- (iota (length variables)))))
- `(let (,values-making-expression)
- (let (,@list-of-variable-value-pairs)
- ,@forms))))
-